Add pluggable congestion controllers (null + BBR) and client --cc option#28
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR introduces a pluggable congestion control framework for the client, allowing selection between a null controller (default, no congestion control) and an experimental BBR-style controller via the new --cc command-line option.
Key changes:
- New congestion controller interface with
null_congestion_controllerandbbr_congestion_controllerimplementations - Refactored
client_send_pacerto use template-based polymorphism with a virtual base class for runtime controller selection - Enhanced client with
--ccoption and integrated congestion controller feedback via RTT/ACK handling
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| src/common/pacer.hpp | Added polymorphic base class and templated pacer to support pluggable congestion controllers; integrated controller callbacks for send/ack events |
| src/common/null_cc.hpp | New null congestion controller providing no-op implementation (default behavior) |
| src/common/bbr.hpp | New BBR-style congestion controller with bandwidth estimation, RTT tracking, and adaptive pacing gain |
| src/common/arg_parser.hpp | Added help text listing available congestion controllers |
| src/client/main.cpp | Added --cc option parsing, controller instantiation logic, and ACK feedback to pacer |
| README.md | Documented congestion control feature with usage examples and behavioral descriptions |
added 3 commits
December 5, 2025 11:13
Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
Signed-off-by: Alan Jowett <alan.jowett@microsoft.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds a pluggable congestion-control framework to the client.
Changes:
null_congestion_controller(default) andbbr_congestion_controllerinsrc/common.client_send_pacernow derives from a base interface so different controllers can be used at runtime.echo_clientgains a new--cc(alias-C) option to selectnullorbbr.README.mdupdated with usage and examples.Notes:
bbrimplementation is a lightweight experimental controller (EWMA bandwidth estimator, STARTUP/PROBE behavior).--cc null).Test plan:
echo_server --port 7andecho_client --server ::1 --port 7 --rate 20000 --cc bbr.